#include <iostream>
using namespace std;
#include "Thread.hpp"
#include <unistd.h>
using namespace MyThread;



void Print(int data)
{
    while (data)
    {
        cout << "I am a thread to print data: " << data-- << endl;
        sleep(1);
    }
}

int main()
{
    Thread<int> t1(10, Print);
    t1.Start();

    t1.Join();
    return 0;
}

















// #include <iostream>
// using namespace std;
// #include <pthread.h>
// #include <unistd.h>
// #include <cstdio>
// #include "Thread.hpp"
// using namespace MyThread;

// void* routine(void* args)
// {
//     // pthread_t* tid = static_cast<pthread_t*>(args);
//     // pthread_detach(*tid);

//     int cnt = 5;
//     while (cnt--)
//     {
//         cout << "I am a thread, pid: " << getpid() << endl;
//         sleep(1);
//     }

//     return (void*)"1234";
// }

// int main()
// {
//     pthread_t tid;
//     pthread_create(&tid, nullptr, routine, nullptr);
//     pthread_detach(tid);

//     // void* retval;
//     // int n = pthread_join(tid, &retval);
//     // if (n == 0)
//     // {
//     //     char* ptr = static_cast<char*>(retval);
//     //     printf("pthread join success, retval: %s\n", ptr);
//     //     // cout << "pthread join success, retval: " << (int*)retval << endl;
//     // }

//     while (true)
//     {
//         cout << "I am main thread, pid: " << getpid() << endl;
//         sleep(1);
//     }

//     return 0;
// }